package com.AdvancedDemos.异常;

import java.util.InputMismatchException;
import java.util.Scanner;

public class 抛出异常捕获异常尝试修复 {
    public static void main(String[] args) {
        //要求:调用一个方法,让用户输入一个合适的价格返回为止

        while (true) {
            try {//当用户输入非法数据时,捕获InputMismatchException异常,并处理异常,系统健壮性大大提高
                System.out.println(getMoney());
                break;//输入成功未报异常后,使用关键字break跳出循环,结束程序
            } catch (InputMismatchException e) {
                System.out.println("请您输入合法的数字!");
                System.out.println(e.getMessage());
//                e.printStackTrace();
            }
        }
        /*
请您输入合适的价格:
-1
您输入的价格是不合适的!
请您输入合适的价格:
a
请您输入合法的数字!
请您输入合适的价格:
1
1.0
* */
    }

    public static double getMoney() {
        Scanner sc = new Scanner(System.in);
        while (true) {
            System.out.println("请您输入合适的价格:");
            double money = sc.nextDouble();
            if (money >= 0) {
                return money;
            } else {
                System.out.println("您输入的价格是不合适的!");
            }
        }
    }

    /*
    * 请您输入合适的价格:
dasdsa
Exception in thread "main" java.util.InputMismatchException
	at java.base/java.util.Scanner.throwFor(Scanner.java:939)
	at java.base/java.util.Scanner.next(Scanner.java:1594)
	at java.base/java.util.Scanner.nextDouble(Scanner.java:2564)
	at com.AdvancedDemos.异常.抛出异常捕获异常尝试修复.getMoney(抛出异常捕获异常尝试修复.java:15)
	at com.AdvancedDemos.异常.抛出异常捕获异常尝试修复.main(抛出异常捕获异常尝试修复.java:8)
    *
    *
    * 当用户不按照要求输入数字时,会产生运行时异常InputMismatchException输入不匹配异常
    *
    * */
}
